home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / conch.arc / DOCS.PLN < prev    next >
Text File  |  1980-01-01  |  35KB  |  1,011 lines

  1.  
  2.  
  3.  
  4.  
  5.     
  6.     
  7.     
  8.     
  9.     
  10.     
  11.  
  12.  
  13.  
  14.  
  15.  
  16.     
  17.                                       Conch
  18.     
  19.     
  20.     
  21.                            An Enhanced Command Shell
  22.     
  23.                           For IBM PCs And Compatibles
  24.     
  25.                                 Running MS-DOS
  26.     
  27.     
  28.     
  29.                                  Version 1.00
  30.     
  31.     
  32.                                   Written by
  33.                               Richard W. Sellens
  34.     
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.     
  45.     
  46.     
  47.                            (c) R.W. Sellens 1985
  48.     
  49.     
  50.     
  51.     Trademarks
  52.     
  53.       IBM    - International Business Machines Corporation
  54.       MS-DOS - Microsoft, Inc.
  55.       Unix   - AT&T, Bell Labs
  56.       DeSmet - DeSmet Software
  57.     
  58.  
  59.  
  60.  
  61.  
  62.     
  63.     
  64.     This program is shareware.
  65.     
  66.     You are encouraged to copy the executable code and documentation and
  67.     distribute it to others, subject to these simple conditions:
  68.     
  69.         - This program and documentation are copyright.  The copyright
  70.         and all other rights to this program remain the property of the
  71.         author, Richard W.  Sellens.
  72.     
  73.         - This program and documentation are not to be distributed in
  74.         modified form.
  75.     
  76.         - This program and documentation are not to be distributed for
  77.         profit.
  78.     
  79.         - The author will not be responsible for any damages arising from
  80.         the use, misuse, or inability to use this program.
  81.     
  82.     The essentially unrestricted distribution of this program allows you,
  83.     the end user, to test the program under your own operating conditions
  84.     and determine whether or not it is useful to you.  If you make
  85.     regular use of this program I ask that you make a contribution to my
  86.     continuing software development efforts.  Please send $25 license
  87.     fee to:
  88.     
  89.            Richard W. Sellens
  90.            372A Churchill Court
  91.            Waterloo, Ontario
  92.            Canada   N2L 6B4
  93.     
  94.     A receipt will be provided on request.
  95.     
  96.     If you find any bugs in the program, or have any suggestions for
  97.     improvements, please let me know by mail at the above address.
  98.     
  99.  
  100.  
  101.  
  102.  
  103.     
  104.     
  105.     Introduction to Conch
  106.     
  107.     As anyone who has used MS-DOS must have noticed, the command
  108.     processor supplied with the operating system is quite simple.  People
  109.     who have used the facilities available on Unix systems must long for
  110.     a more sophisticated, powerful shell.  Those who spend a lot of time
  111.     interacting with the computer at the command line level could benefit
  112.     from a more comfortable way to make use of the basic command
  113.     processor features.  Conch does not provide a fully programmable
  114.     shell, but it does provide many of the comfort features.
  115.     
  116.         Command line editing - Conch uses the PC editing keys in just the
  117.         manner that one would expect.  This makes it much easier to enter
  118.         commands and correct errors.
  119.     
  120.         I/O redirection - Conch performs I/O redirection and piping
  121.         itself, using the same command line format as the DOS shell.
  122.     
  123.         History - Conch maintains a buffer of previously entered command
  124.         lines which can be recalled to the command line, edited, and
  125.         re-executed.  This is done using the vertical cursor motion keys
  126.         to select the desired command.
  127.     
  128.         Command Aliasing - It is often desirable to call a given command
  129.         sequence by another name.  This allows the shortening of long
  130.         command strings to simple mnemonics as well as the reassignment
  131.         of the standard command names to names which make more sense to
  132.         the user.
  133.     
  134.         Virtual Device Names - On hard disk systems with complex
  135.         directory tree structures it can be difficult to remember the
  136.         exact paths to directories that are in common use.  Also, it is
  137.         painful to type a long path name for every directory reference. 
  138.         Conch allows you to define virtual device names to shorten and
  139.         simplify command line path references.
  140.     
  141.     Conch is written in DeSmet C, and uses only standard MS-DOS function
  142.     calls, with one exception: IBM PC BIOS interrupt 10 hex is used to
  143.     access the video screen.  The net result is that Conch should run on
  144.     any machine that makes a half hearted attempt to be compatible with
  145.     the IBM PC.
  146.     
  147.  
  148.  
  149.  
  150.  
  151.     
  152.     
  153.     Starting Conch
  154.     
  155.     Two things should be done at the DOS level, perhaps in an
  156.     autoexec.bat file, before starting Conch:
  157.     
  158.         - The command search path should be set to the desired value
  159.         using the DOS path command.  This cannot be changed from within
  160.         Conch.
  161.     
  162.         - The prompt string should be set to the desired value using the
  163.         DOS prompt command.  This cannot be changed from within Conch.
  164.     
  165.     Conch is then invoked by typing 
  166.     
  167.     conch
  168.     
  169.     Conch will load, display a banner with the version number and
  170.     copyright notice and initialize itself.  As part of this
  171.     initialization Conch will look for a file named conchrc in the
  172.     current directory.  Commands will be taken from this file and
  173.     executed, just as if they had been typed at the command line, but
  174.     they will not be recorded as history.
  175.     
  176.     If the default directory is changed before Conch is invoked, then
  177.     Conch will take conchrc from the new directory, rather than the root
  178.     directory.  This makes it possible to provide different
  179.     initialization procedures for different users.  A simple start-up
  180.     program can be used to switch to a user's home directory before Conch
  181.     is invoked, thus controlling the initialization file used.
  182.     
  183.  
  184.  
  185.  
  186.  
  187.     
  188.     
  189.     The Command Line Editor
  190.     
  191.     When Conch is started it will perform some initialization and then
  192.     display the command prompt, just as the DOS shell does.  You may then
  193.     enter a command, just as you would with DOS, using the alpha-numeric
  194.     keys followed by a carriage return.  If your typing is perfect then
  195.     you will notice no difference.  If however, you are prone to error
  196.     like the rest of us, the following features will make it easy to
  197.     modify the command as typed so far.
  198.     
  199.         Motion - The left and right arrow keys will move the cursor one
  200.         space left or right, but will move no further left than the first
  201.         character of the command line and no further right than the first
  202.         space beyond the end of the current command line.  The Home and
  203.         End keys will move the cursor to the beginning and end of the
  204.         command line respectively, while the Esc key will move the cursor
  205.         to the beginning of the command line and erase anything typed so
  206.         far.
  207.     
  208.         Delete - The Del key will delete the current character, unless
  209.         the cursor is at the end of the line, in which case it has no
  210.         effect.  The backspace key deletes the character immediately to
  211.         the left of the cursor and moves the remainder of the line in,
  212.         unless the cursor is at the beginning of the line, in which case
  213.         it has no effect.
  214.     
  215.         Insert - Normally a character typed at the keyboard will overtype
  216.         the character under the cursor.  The Ins key toggles the insert
  217.         mode on and off.  When in insert mode, characters typed at the
  218.         keyboard are inserted before the current character.  When insert
  219.         mode is on the cursor will appear as a block, rather than the
  220.         usual underbar.
  221.     
  222.     If this sounds familiar, it is because it duplicates the line editing
  223.     facilities of the BASIC interpreter at the command line.  This
  224.     capability simplifies the entry of commands and makes it easy to edit
  225.     previous commands called up from the history facility of the shell.
  226.     
  227.     In addition to these editing capabilities, there are two key
  228.     combinations that have a special effect at the command line.  Alt-H
  229.     will cause the current contents of the command line to be added to
  230.     the history buffer.  Alt-P will cause the current contents of the
  231.     command line to be added to the pending commands list.  In neither
  232.     case will the command be executed, it will just be stored.  
  233.     
  234.  
  235.  
  236.  
  237.  
  238.     
  239.     
  240.     What Does a Command Line Look Like?
  241.     
  242.     The most general form of the command line is:
  243.     
  244.     <command group>[;<command group>]...
  245.     
  246.     Any number of command groups may be entered on a line, separated by
  247.     semicolons, subject only to the maximum allowable length of a line. 
  248.     (The DOS imposed maximum is 128 characters.) Each command group will
  249.     be executed in sequence, just as if they had been entered on
  250.     succeeding command lines.  This feature is an extension of the DOS
  251.     command processor.
  252.     
  253.     Conch will treat any command line which starts with a period (.) as a
  254.     null line.  This is consistent with DOS, and provides a way to
  255.     include comments in command lists.
  256.     
  257.     A command group has the same form as the command line described in
  258.     the DOS manual.  In its simplest form a command group contains only
  259.     the name of the command to be executed, but it may also contain
  260.     arguments, pipes, and I/O redirection.
  261.     
  262.     <command> [arg...][|<command> [arg...]...][<infile][[>]>outfile]
  263.     
  264.     If a pipe (|) is used to join commands, then the data sent to
  265.     standard output by the first command is fed to the standard input of
  266.     the second command.  Any number of commands may be piped together in
  267.     this way.  See the section titled Pipes and/or the DOS manual for
  268.     further details.
  269.     
  270.     If arguments are found that begin with one of `<', `>', or `>>' the
  271.     remainder of that argument is used as a source or destination for I/O
  272.     redirection.  `<' indicates a source file or device which is to
  273.     replace the current standard input device.  `>' indicates a
  274.     destination file or device that is to replace the current standard
  275.     output device.  If the file exists the current contents will be
  276.     replaced.  `>>' is the same as `>', except that the output will be
  277.     appended to the current contents of the file, if any.  See the DOS
  278.     manual for further details.
  279.     
  280.     Commands and arguments are separated by spaces or tabs as delimiters. 
  281.     Spaces are optional around pipes, semicolons, and preceding I/O
  282.     redirection.  Quotes may be used to prevent special characters such
  283.     as `|', `;', `<', `>', tabs and spaces from being interpreted by the
  284.     shell.  See the section titled Parsing of the Command Line for
  285.     details.
  286.     
  287.        
  288.     
  289.  
  290.  
  291.  
  292.  
  293.     
  294.     
  295.     Command History Mechanism
  296.     
  297.     Conch automatically saves each command typed at the keyboard in a
  298.     buffer for future reference.  When the buffer fills, the oldest
  299.     commands are discarded to make room for new ones.  The number of
  300.     commands that are available is dependent on the size of the buffer,
  301.     buffer utilization by the other features of Conch, and the lengths of
  302.     the commands that were saved.  Generally the buffer will hold more
  303.     history than you need, but if the amount saved is insufficient it
  304.     will be necessary to move up to a version of the shell that was
  305.     created with a larger buffer.
  306.     
  307.     When Conch gives you the command prompt you may enter a command using
  308.     the editing keys as described in the Command Line Editor section, or
  309.     you may select a previously typed command from the history buffer. 
  310.     While on the command line, the up and down arrow keys will move you
  311.     through the history buffer, displaying a previously entered command
  312.     on the current command line.  The up arrow moves backward in time,
  313.     while the down arrow will move you forward.  The buffer does not
  314.     wrap, so that eventually you will reach the oldest available command
  315.     entry and go no further.
  316.     
  317.     Additionally, if the PgUp key is pressed while on the command line,
  318.     it will provide a display of a page of the history buffer so that
  319.     commands appear in context.  Each line of the display will contain an
  320.     old command, or just the first part of the command if the complete
  321.     command would have run off the screen.  An indicator points out the
  322.     currently selected line of history and, as before, the selected
  323.     history line will appear in its entirety on the current command line. 
  324.     In this display mode the up and down arrow keys will still move
  325.     through the history buffer one command at a time, while the PgUp and
  326.     PgDn keys will move up or down in larger increments.
  327.     
  328.     Once the desired command has been selected it may be executed as is,
  329.     simply by pressing carriage return, or it may be edited just as if
  330.     the text of the command had been entered from the keyboard.  Any
  331.     modifications made to the text on the command line will have no
  332.     effect on the image of the old command stored in the history buffer. 
  333.     Also, when you re-execute the command it will be stored in the
  334.     history buffer again, whether or not it was modified.
  335.     
  336.     In addition to the history buffer, Conch maintains a pending commands
  337.     buffer.  Commands are added to the buffer by using Alt-P to store the
  338.     current command line, or by reading them in using the -r option of
  339.     the pending command.  The pending command also allows you to display
  340.     the contents of the buffer, execute the commands in the buffer, write
  341.     them to a file, or flush the buffer.  See the command summary for
  342.     details.
  343.     
  344.     
  345.     
  346.  
  347.  
  348.  
  349.  
  350.     
  351.     
  352.     Command Aliasing
  353.     
  354.     Conch maintains a list of command aliases which are input by the
  355.     user.  A command alias is essentially a statement that ``When I say
  356.     this, I really mean that.''.  An alias is added to the shell's list
  357.     by using the alias command.
  358.     
  359.     alias <name> <replacement string>
  360.     
  361.     <name> is the name that you will use to request a particular action
  362.     and <replacement string> is the command line to be used to produce
  363.     that action.  For example
  364.     
  365.     alias dir ls -l
  366.     
  367.     tells Conch that each time you enter the command dir, it should
  368.     execute the command ls -l.  This can be extremely useful, especially
  369.     for the more complex commands.
  370.     
  371.     <name> must be a string of less than 64 characters containing only
  372.     the letters A through Z, the digits 0 through 9 and the characters
  373.     
  374.       $   #   &   @   !   %   (   )   -   {   }   _
  375.     
  376.     All alias names are converted to lower case for storage, making Conch
  377.     case independent just like DOS.
  378.     
  379.     If the previously aliased <name> is followed by arguments on the
  380.     command line they are usually just transferred to the end of the
  381.     <replacement string>, and separated from it by whitespace.  The
  382.     command entry
  383.     
  384.     dir \temp\idea
  385.     
  386.     would be translated into
  387.     
  388.     ls -l \temp\idea
  389.     
  390.     for execution.  The exception comes when <replacement string>
  391.     contains one or more occurrences of the tail substitution character. 
  392.     (The tail substitution character is initially set as `$' but it can
  393.     be changed to any other character using the tsub command.) If the
  394.     tail substitution character occurs in the replacement string, in each
  395.     instance it will be replaced with the command tail.  The command tail
  396.     will be stripped of leading and trailing whitespace so that if this
  397.     alias is set,
  398.     
  399.     alias killer "del file$.bak ; del dud$.*"
  400.     
  401.     (Note that quotes are required around the replacement string to
  402.     prevent Conch from interpreting the semicolon before it is sent to
  403.     the alias command.)
  404.     
  405.     
  406.  
  407.  
  408.  
  409.  
  410.     
  411.     
  412.     killer 1
  413.     
  414.     will be expanded to
  415.     
  416.     del file1.bak ; del dud1.*
  417.     
  418.     and
  419.     
  420.     killer test
  421.     
  422.     will be expanded to
  423.     
  424.     del filetest.bak ; del dudtest.*
  425.     
  426.     If the alias command is issued with a name which is already aliased,
  427.     then the new alias definition will replace the old.  No warning or
  428.     diagnostic message will be issued.  If an alias is to be removed,
  429.     rather than redefined, the unalias command is used.  It takes the
  430.     form:
  431.     
  432.     unalias <name> 
  433.     
  434.     where <name> is the name of a previously defined alias.
  435.     
  436.     The aliasing mechanism is fully recursive, so aliases may be defined
  437.     in terms of other aliases.  There is a check on the recursion to
  438.     prevent either direct, or indirect circular recursion.
  439.     
  440.     alias ls ls -l
  441.     
  442.     will result in one substitution, giving ls -l whenever ls is entered.
  443.     
  444.     alias ls dir -l
  445.     
  446.     alias dir ls
  447.     
  448.     will result in two substitutions, giving ls -l whenever ls is
  449.     entered.
  450.     
  451.        
  452.     
  453.  
  454.  
  455.  
  456.  
  457.     
  458.     
  459.     Virtual Device Names
  460.     
  461.     When tree structured directories grow, the paths to the directories
  462.     can become long, and perhaps hard to remember.  The use of virtual
  463.     device names makes it easier to remember the names of commonly used
  464.     directories, as well as easing the typing load.  A virtual device is
  465.     defined by the vdev command
  466.     
  467.     vdev <name> <replacement string>
  468.     
  469.     and can be redefined by issuing another vdev command for the same
  470.     name.  <name> must be at least 2 characters long, so as not to
  471.     conflict with the single letter disk drive identifiers.
  472.     
  473.     For example, the text of my thesis might be stored in a directory
  474.     named c:\rick\school\thesis\.  A virtual device could be created by
  475.     
  476.     vdev thesis c:\rick\school\thesis\
  477.     
  478.     Any time the characters thesis: appear at the start of a token they
  479.     will be replaced by the replacement string; in this case
  480.     c:\rick\school\thesis\.  Thus
  481.     
  482.     type thesis:chap1
  483.     
  484.     will be expanded to
  485.     
  486.     type c:\rick\school\thesis\chap1
  487.     
  488.     In the special case where the name and colon form the entire token,
  489.     any trailing backslash will be removed, so that
  490.     
  491.     cd thesis:
  492.     
  493.     will be expanded to
  494.     
  495.     cd c:\rick\school\thesis
  496.     
  497.     just the way it should be.
  498.     
  499.     Also, simply declaring a virtual device name on the command line will
  500.     take you to the directory it represents.  This is analogous to using
  501.     a: to move to drive A.  This means that
  502.     
  503.     thesis:
  504.     
  505.     is almost equivalent to
  506.     
  507.     cd thesis:
  508.     
  509.     
  510.  
  511.  
  512.  
  513.  
  514.     
  515.     
  516.     The difference is that cd thesis: will change the default directory
  517.     of drive C to \rick\school\thesis without changing the default drive,
  518.     while thesis: will also change the default drive to ``take you
  519.     there''.  On machines with a single hard disk, where the default
  520.     drive is likely to remain constant, the two are interchangeable.
  521.     
  522.     The virtual device name facility is fully recursive, so virtual
  523.     device names may be defined in terms of other virtual device names.
  524.     
  525.     vdev old thesis:old\
  526.     
  527.     will set up old: to be expanded into c:\rick\school\thesis\old\.  Any
  528.     circular reference, where a virtual device name is defined in terms
  529.     of itself, will cause an error.
  530.     
  531.     To complement the virtual device naming capability, Conch keeps a
  532.     list of reserved device names.  The rdev command is used to add a
  533.     device name to the list.
  534.     
  535.     rdev <name>
  536.     
  537.     The vdev command will generate an error if the user tries to create a
  538.     virtual device with the same name as a previously defined reserved
  539.     device.  This is the only purpose of the reserved device name
  540.     facility.
  541.     
  542.     The rules given for legal characters in alias names also apply to
  543.     both vdev and rdev names.  They are also stored in lower case, making
  544.     them case independent.
  545.     
  546.     
  547.     
  548.  
  549.  
  550.  
  551.  
  552.     
  553.     
  554.     Summary of Conch Internal Commands
  555.     
  556.     This section lists all of the Conch internal commands, and provides
  557.     the mechanical details of their use.  For further information, and
  558.     examples of the more complex commands, see the narrative sections of
  559.     the manual.
  560.     
  561.     
  562.     alias [<name> <replacement string>]
  563.     
  564.         Instructs the shell to substitute a replacement string for the
  565.         command <name> in future.  If <replacement string> contains
  566.         special characters like `|', `;', `>', `<, etc., enclose the
  567.         string in either single ('') or double ("") quotes to prevent
  568.         their evaluation before substitution.  If no arguments are given,
  569.         the current list of aliases is printed.
  570.     
  571.     
  572.     cd [d:][<path>]
  573.     
  574.         Behaves just like the DOS cd, except that <path> may include a
  575.         virtual device name.
  576.     
  577.     
  578.     exit
  579.     
  580.         Leaves Conch and returns to DOS.
  581.     
  582.     
  583.     history [-n [<filename>]]
  584.     
  585.         Prints out the complete history buffer, in the order in which the
  586.         commands were entered.  If an argument is included the results
  587.         will be:
  588.     
  589.                         -f the history buffer is flushed, eliminating all
  590.                            previous entries.
  591.           -w[n] <filename> writes the most recent n commands from the
  592.                            contents of the history buffer to <filename>.
  593.              -r <filename> reads in command lines from <filename> and
  594.                            adds them to the history buffer.
  595.     
  596.  
  597.  
  598.  
  599.  
  600.     
  601.     
  602.     pending [-n [<filename>]]
  603.     
  604.         Prints out the list of pending commands if no arguments are
  605.         given.  If arguments are included the results will be:
  606.     
  607.                      -e the pending commands are executed.  They will not
  608.                         be recorded as history, since they were not
  609.                         entered from the command line.
  610.                      -f the pending command list is flushed, eliminating
  611.                         all previous entries.
  612.           -w <filename> writes the contents of the pending command list
  613.                         to <filename>.
  614.           -r <filename> reads in command lines from <filename> and
  615.                         appends them to the pending command list.
  616.     
  617.     
  618.     rdev [<name>]
  619.     
  620.         Adds <name> to the reserved device name list.  If no argument is
  621.         given, a list of the defined reserved device names is printed.
  622.     
  623.     
  624.     source <filename>
  625.     
  626.         Takes command input from a file, rather than the keyboard.  This
  627.         provides the most rudimentary of batch facilities.  The commands
  628.         in <filename> will not be recorded as history, since they were
  629.         not entered from the command line.
  630.     
  631.     
  632.     tsub [<char>]
  633.     
  634.         Sets the tail substitution character to the first non-blank
  635.         character after tsub.  If there is no argument, the current tail
  636.         substitution character is displayed.
  637.     
  638.     
  639.     unalias <name>
  640.     
  641.         Removes the alias entry, if any, for <name>.
  642.     
  643.     
  644.     vdev [<name> <replacement string>]
  645.     
  646.         Adds <name> to the virtual device name list, so that in future
  647.         name: at the beginning of a token will be replaced with
  648.         <replacement string>.  If no arguments are given, the current
  649.         virtual device name list will be printed.
  650.     
  651.  
  652.  
  653.  
  654.  
  655.     
  656.     
  657.     Parsing of the Command Line
  658.     
  659.     To interpret the Conch command line it is necessary to take it apart,
  660.     massage it a bit, and reassemble it.  This is called parsing and
  661.     processing.
  662.     
  663.     For the most part Conch parsing is very simple; a command is composed
  664.     of tokens which are separated by whitespace.  (Whitespace is the
  665.     generic term for characters such as spaces or tabs, appearing singly
  666.     or in a group.) When the command is processed the tokens are
  667.     separated, and the whitespace between the tokens is thrown away. 
  668.     After the tokens are processed, they are reassembled into a command
  669.     with new whitespace between them.  This will have no effect on the
  670.     execution of the command, unless the exact configuration of the
  671.     whitespace was important.  Conch will not preserve bizarre
  672.     combinations of whitespace between tokens.  Thus, if your application
  673.     is sensitive to the configuration of whitespace, special measures may
  674.     be needed.
  675.     
  676.     After the command line is broken into tokens, it is checked for
  677.     semicolons.  If any are found the line is broken into separate
  678.     command groups which are sequentially fed back into the top of the
  679.     processor.  Then any I/O redirection is stripped out.  (Conch is not
  680.     sensitive to the position of I/O redirection tokens in the command
  681.     group.) If a command group contains pipes it is broken into separate
  682.     commands, with appropriate redirection to temporary files, and fed
  683.     back into the top of the processor.
  684.     
  685.     Once it is dealing with a single command the processor tests the
  686.     first word for alias substitution.  If a substitution results in
  687.     multiple commands (using either semicolons or pipes) the command
  688.     group is fed back into the top of the processor.  The processor then
  689.     tests each token to see if it begins with a recognized virtual device
  690.     name, and if so, makes the necessary substitution.
  691.     
  692.     Any I/O redirection required is set up.  Any quotes within the
  693.     command string are removed, unless they are preceded by a backslash
  694.     (\), in which case the backslash is removed.  If the command is one
  695.     of the internal commands the appropriate function is called. 
  696.     Otherwise, Conch looks in the current directory and down the search
  697.     path for the named command as either a .com, .exe, or .bat file.  If
  698.     found, it is executed and passed a tail composed of all the remaining
  699.     tokens, separated by spaces.
  700.     
  701.     The tail will also have one leading space, so that it will appear to
  702.     the application that it was invoked from the DOS command line with
  703.     exactly one space between the command name and the arguments.  Some
  704.     badly written programs process the command tail based on the
  705.     assumption that it has exactly one leading space.
  706.     
  707.  
  708.  
  709.  
  710.  
  711.     
  712.     
  713.     Quotation Marks
  714.     
  715.     Single ('') and double ("") quote pairs can be used to keep the
  716.     parser from messing with portions of the command line.  Anything
  717.     within single or double quotes will be untouched by the parser.  The
  718.     quotes will be removed before the command tail is passed to the
  719.     command itself.
  720.     
  721.     This is useful for maintaining peculiar whitespace combinations, and
  722.     for slipping normally significant characters past the command
  723.     processor.  The command
  724.     
  725.     grep " ;"
  726.     
  727.     will result in grep being invoked and passed a command tail composed
  728.     of two spaces and a semicolon.  (The first space is the one
  729.     separating the command and the tail, while the second comes from
  730.     within the quoted string.) If the quotes were not present, Conch
  731.     would interpret the semicolon as a command separator, and would
  732.     ignore the superfluous space.  The result would be the same if single
  733.     quotes ('') had been used, rather than double quotes.
  734.     
  735.     The next question is ``How do you include quotes on the command line
  736.     as characters, rather than delimiters?''.  To include quotes as
  737.     characters they must be preceded by a backslash (\).  For example
  738.     
  739.     grep \'"\" ;"
  740.     
  741.     would invoke grep, and pass it a command tail made up of a space, a
  742.     single quote, a double quote, a space and a semicolon.
  743.        
  744.     Pipes
  745.     
  746.     Since DOS is not multi-tasking, it is not possible to implement
  747.     ``true'' pipes.  The technique used by Conch is the same as that used
  748.     by command.com.  Piped commands are converted into a sequentially
  749.     executed series of commands with I/O redirection through temporary
  750.     files.
  751.     
  752.     Under Conch these files have names of the form temp:%pipexx where xx
  753.     is a two letter combination that varies to differentiate between
  754.     files, and temp: is a virtual device name which must be defined by
  755.     the user before piping is used.  If a RAM disk is being used, setting
  756.     temp: to represent a directory on the RAM disk will result in much
  757.     faster execution of piped commands.
  758.     
  759.  
  760.  
  761.  
  762.  
  763.     
  764.     
  765.     Conch ensures that the xx in the pipe filenames are different for
  766.     each file created, but if multiple copies of Conch are active, then
  767.     the pipe filenames will not be unique.  This will cause problems if
  768.     commands containing pipes are piped into a second copy of Conch.  For
  769.     example, the command:
  770.     
  771.     dummy | conch | cat
  772.     
  773.     will not behave properly if dummy feeds piped commands to conch,
  774.     because the pipefile names will conflict.  This is a bug, but one
  775.     that is unlikely to cause significant inconvenience, or even be
  776.     evident to most users.
  777.     
  778.  
  779.  
  780.  
  781.  
  782.     
  783.     
  784.     Command.com and MS-DOS Internal Commands
  785.     
  786.     Conch installs itself on top of command.com, and uses some of the
  787.     features provided by command.com, such as the 4B hex function call
  788.     for executing a program.  This is not as much of penalty as might be
  789.     expected.  Only the resident portion of command.com is retained, and
  790.     its size is only a couple of Kbytes.
  791.     
  792.     Conch does not provide most of the internal commands that exist in
  793.     command.com.  These commands are not lost to the user.  They can
  794.     still be run by invoking command.com with the /c option; i.e.,
  795.     
  796.     command /c dir
  797.     
  798.     This is extremely bulky, but the internal commands can be aliased.
  799.     
  800.     alias dir command /c dir
  801.     
  802.     will make dir behave just the way it does when issued at the DOS
  803.     command line.
  804.     
  805.     Invoking command.com to perform DOS tasks takes a little longer.  On
  806.     my PC with a 10 Mbyte hard drive it takes about three quarters of a
  807.     second longer to start the task.  In my opinion, this delay is not
  808.     particularly noticeable, as the commonly used DOS internal commands
  809.     are I/O bound anyway, so the response is never instantaneous.
  810.     
  811.     Using command.com to perform program loading and internal commands
  812.     allows for complete compatibility with a bare DOS system, so that you
  813.     will be hit with a minimum number of surprises.  It also means that
  814.     Conch is independent of DOS version.  If a new version of DOS is
  815.     issued, with an expanded or different command set, just change the
  816.     aliases.  I feel that these advantages outweigh the minor performance
  817.     disadvantage.
  818.     
  819.     It is a quirk of DOS that whenever a new command.com is invoked, it
  820.     must be the same copy as the machine was booted from.  Because of
  821.     this, the first copy of command.com found down the search path must
  822.     be the one that you booted from.  This will usually mean including
  823.     c:\ as one of the path elements.  Alternatively you could alias
  824.     command to c:\command, so as to be specific.
  825.     
  826.  
  827.  
  828.  
  829.  
  830.     
  831.     
  832.     Batch Files
  833.     
  834.     Conch runs batch files by invoking command.com.  This means that none
  835.     of the features of Conch are available inside the batch file. 
  836.     However, when a batch file is run, the command line arguments will be
  837.     processed by Conch before they are passed to command.com, so virtual
  838.     device names, etc.  may be used on the command line.
  839.     
  840.     Commonly used batch files tend to be just lists of commands, without
  841.     any use of the flow control and other batch file features provided by
  842.     DOS.  Batch files of this type can be replaced by aliasing, if the
  843.     list of commands is short, or by using the source command if the list
  844.     of commands is longer.  See the sample conchrc for an aliasing
  845.     example.
  846.     
  847.  
  848.  
  849.  
  850.  
  851.     
  852.     
  853.     Error Messages Produced by Conch
  854.     
  855.     If Conch detects an error it will print out one of the messages
  856.     contained in this section.  It may also print a line of text to
  857.     provide a clue concerning the cause of the error, or an explanation. 
  858.     Most error messages produced by Conch are self explanatory.
  859.     
  860.     Bad Alias Name.
  861.     
  862.     Bad Command Name.
  863.     
  864.     Bad Device Name.
  865.     
  866.     Bad Filename.
  867.     
  868.     Bad Path Name.
  869.     
  870.     If Conch says something is ``bad'', then that thing either does not
  871.     exist, or Conch was unable to find it, or in the case of a device it
  872.     has already been defined as a reserved device name.
  873.     
  874.     Illegal Character in Name -- A-Z, 0-9, $#&@!%()-{}_ Permitted.
  875.     
  876.     An attempt was made to define an alias, virtual device name or
  877.     reserved device name containing characters other than those
  878.     permitted.
  879.     
  880.     Command Too Long When Expanded.
  881.     
  882.     DOS restricts commands to a maximum of 128 characters.  Conch will
  883.     not allow you to input a command that is longer than that, however,
  884.     if subsequent expansion of the command would make it longer than 128
  885.     characters this error message is generated.
  886.     
  887.     Extra Arguments Supplied to Internal Command.
  888.     
  889.     Too many arguments were given when invoking a Conch internal command.
  890.     
  891.     Insufficient Pointer Space.
  892.     
  893.     No More Space in Main Buffer.
  894.     
  895.     Out of Memory.
  896.     
  897.     Recursion Too Deep -- Need Larger Memory Version.
  898.     
  899.     Any of these errors indicate that you were asking Conch to do
  900.     something that was too big or too complex for the version of the
  901.     program installed.  This includes things such as defining more
  902.     aliases, etc.  than will fit in the space allotted for the buffer
  903.     
  904.  
  905.  
  906.  
  907.  
  908.     
  909.     
  910.     or pointers, or asking Conch to evaluate a complex command group
  911.     involving many levels of recursion in the definition of aliases or
  912.     virtual device names.
  913.     
  914.     The solution to the problem is to use a larger memory version of the
  915.     program.  On the distribution disk are several sequentially numbered
  916.     versions of the program.  (conch1.exe, conch2.exe, etc.) The higher
  917.     the number, the larger the amount of working space provided for
  918.     Conch.  Naturally, using a larger memory version of the program will
  919.     leave less of your machine's memory available to run applications in.
  920.     
  921.     Warning -- Unmatched Single or Double Quotes.
  922.     
  923.     If Conch finds unmatched quotes it will issue this warning message. 
  924.     It will proceed with the execution of the command, but the entire
  925.     portion of the line after the last quotation mark will be treated as
  926.     a single token.  The effect will be the same as if a closing
  927.     quotation mark had been added at the end of the line.
  928.     
  929.     Could Not Open File -- Probably Disk Full.
  930.     
  931.     Error Writing File -- Probably Disk Full.
  932.     
  933.     These two are self explanatory
  934.     
  935.     Unspecified error.
  936.     
  937.     This message will appear if the program just run terminated with a
  938.     non-zero exit code.  The exit code is mechanism provided by DOS which
  939.     allows a program to communicate its exit status to the program that
  940.     invoked it.  Usually a non-zero exit code means the program
  941.     terminated due to some error condition.
  942.     
  943.     This message will also be displayed if one of Conch's internal
  944.     routines returns an unforseen error code.  This should not happen. 
  945.     If it does please contact the author with details of how the error
  946.     occurred, and how it can be repeated.
  947.     
  948.  
  949.  
  950.  
  951.  
  952.     
  953.     
  954.     Ordering Information for the Program and Source Code
  955.     
  956.     A complete copy of the source code for Conch is available for
  957.     personal use only.  It is written in the DeSmet C language, with some
  958.     imbedded assembly code.  A signed and dated copy of the declaration
  959.     below must accompany your order.
  960.     
  961.     
  962.     Please send me a copy of the complete source code for Conch.  This
  963.     source code is to be used only by me, or by my agents under my
  964.     supervision.  No portion of the source code, or any executable code
  965.     produced from it will be distributed to a third party.
  966.     
  967.     I understand that this program and documentation are copyright and
  968.     that the copyright and all other rights to this program remain the
  969.     property of the author, Richard W.  Sellens.
  970.     
  971.     I also understand that the author will not be responsible for any
  972.     damages arising from the use, misuse, or inability to use this
  973.     program.
  974.     
  975.     
  976.     Name _____________________________  Signature _______________________
  977.                                              Date _______________________
  978.     
  979.     ---------------------------------------------------------------------
  980.     
  981.     Order Form -- Conch Shell Program
  982.     
  983.     
  984.     Demo Diskette -- Software and manual text on diskette.
  985.               _______ copies at $10 each                $_____________
  986.     
  987.     Conch Program Package -- Software on diskette complete with hardcopy
  988.             manual.  Includes $25 license fee.
  989.               _______ copies at $35 each                $_____________
  990.     
  991.     Conch Source Package -- Software and source code on diskette complete 
  992.             with hardcopy manual.  Includes $25 license fee.  A signed
  993.             and dated copy of the declaration above must be provided for
  994.             each copy ordered.
  995.               _______ copies at $50 each                $_____________
  996.     
  997.                                                Total    $_____________
  998.                      Ontario residents add 7% P.S.T.    $_____________
  999.                             Enclosed with this order    $_____________
  1000.     
  1001.        Name: ______________________________________
  1002.     Address: ______________________________________
  1003.              ______________________________________
  1004.     
  1005.     Mail to: R.W. Sellens, 372A Churchill Ct., Waterloo, Ont., 
  1006.              Canada  N2L 6B4
  1007.  
  1008.  
  1009. ___________________________________
  1010.     
  1011.     Mail to: R.W. Sellens, 372A Churchill Ct.,